#include<pthread.h>
#include<iostream>
using namespace std;


// 自旋锁的使用
int num = 0;
pthread_spinlock_t spinlock; //定义一个全局的自旋锁

void* start_routine(void* args)
{
    char* name = static_cast<char*>(args);
    pthread_spin_lock(&spinlock);
    cout << "自旋锁成功加锁" << endl;
    for(int i = 1; i <= 5; i++)
    {
        cout << name << " 正在对num进行++操作, num++: " << num << endl;
        num++;
    }
    pthread_spin_unlock(&spinlock);
    cout << "自旋锁已经成功解锁\n";

    return nullptr;
}

int main()
{
    // 自旋锁的使用和之前的互斥锁(等待挂起锁)的操作是一样的，并且自旋这个操作库里的接口会帮我们做
    pthread_spin_init(&spinlock, PTHREAD_PROCESS_PRIVATE);

    pthread_t t1, t2; 
    pthread_create(&t1, nullptr, start_routine, (void*)"thread 1");
    pthread_create(&t2, nullptr, start_routine, (void*)"threead 2");
    
    pthread_spin_destroy(&spinlock);

    pthread_join(t1, nullptr);
    pthread_join(t2, nullptr);




    return 0;
}
